From: Keir Fraser Date: Fri, 18 Jun 2010 13:09:44 +0000 (+0100) Subject: cpuidle: add comments for hpet cpumask_lock usage X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11904 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=636fed5063dc8a5d0c64bb15bfa13616304415bd;p=xen.git cpuidle: add comments for hpet cpumask_lock usage Signed-off-by: Wei Gang --- diff --git a/xen/arch/x86/hpet.c b/xen/arch/x86/hpet.c index 25e4434cc1..4d9d5a1b61 100644 --- a/xen/arch/x86/hpet.c +++ b/xen/arch/x86/hpet.c @@ -34,6 +34,17 @@ struct hpet_event_channel int shift; s_time_t next_event; cpumask_t cpumask; + /* + * cpumask_lock is used to prevent hpet intr handler from accessing other + * cpu's timer_deadline_start/end after the other cpu's mask was cleared -- + * mask cleared means cpu waken up, then accessing timer_deadline_xxx from + * other cpu is not safe. + * It is not used for protecting cpumask, so set ops needn't take it. + * Multiple cpus clear cpumask simultaneously is ok due to the atomic + * feature of cpu_clear, so hpet_broadcast_exit() can take read lock for + * clearing cpumask, and handle_hpet_broadcast() have to take write lock + * for read cpumask & access timer_deadline_xxx. + */ rwlock_t cpumask_lock; spinlock_t lock; void (*event_handler)(struct hpet_event_channel *);